// common/http.js
// 公共域名（可根据环境切换）

const baseURL = {
	development: 'http://192.168.1.73:8000', // 开发环境
	production: 'https://jinzhizixun.com.cn', // 生产环境
	test: 'http://192.168.1.46:8000' // 测试环境
};
// 图片上传域名
const imgURL = {
	development: 'https://192.168.1.46:8000', // 开发环境
	production: 'https://file.jinzhizixun.com.cn', // 生产环境
};


// 当前环境（UniApp 中可通过 process.env.NODE_ENV 区分，也可手动指定）
const env = process.env.NODE_ENV || 'development';
const API_BASE_URL = baseURL[env];
const IMG_BASE_URL = imgURL[env]

/**
 * 通用请求方法
 * @param {String} url - 接口路径（相对于baseURL）
 * @param {Object} options - 请求配置（method、data、header等）
 * @returns {Promise}
 */
const request = (url, options = {}) => {
	if (options.showLoading) {
		uni.showLoading({
			title: '加载中',
			mask: true,
		})
	}
	// 默认配置
	const defaultOptions = {
		method: options.method || 'GET',
		data: options.data || {},
		header: {
			// 'Content-Type': 'application/json',
			// 可添加全局token（从本地存储获取）
			'Authorization': uni.getStorageSync('wxwork_token') || ''
		},
		...options
	};

	// 拼接完整URL
	const fullUrl = API_BASE_URL + url;

	return new Promise((resolve, reject) => {
		uni.request({
			url: fullUrl,
			...defaultOptions,
			success: (res) => {
				console.log(res)
				// 响应拦截：统一处理状态码
				if (res.data.code == 200 && res.data.msg == 0) {
					uni.showToast({
						title: '修改失败',
						icon: 'none'
					})
					reject(res);
				} else if (res.data.code == 0 || res.data.code == 200) {
					resolve(res.data);
				} else if (res.data.code == 401) {
					const encodedTarget = encodeURIComponent('/pages/index/callBack');
					const authUrl =
						`${API_BASE_URL}/wx/yingyong/login?wantUrl=${encodedTarget}`;
					console.log('authUrl', authUrl);
					if (env === 'development') {
						console.log('当前是开发环境');
					} else if (env === 'production') {
						console.log('当前是生产环境');
						window.location.href = authUrl
					}
					reject(res.data);
				} else if (res.data.code == 500) {
					uni.showToast({
						title: res.data.msg || '查询失败',
						icon: 'none'
					})
					reject(res.data);
				} else {
					reject(res.data);
				}

			},
			fail: (err) => {
				// 请求失败（如断网）
				uni.showToast({
					title: '网络连接失败',
					icon: 'none'
				});
				reject(err);
			},
			complete: () => {
				// 可在这里关闭加载动画等
				if (options.showLoading !== false) {
					uni.hideLoading();
				}
			}
		});
	});
};

/**
 * 封装常用请求方法（GET/POST/PUT/DELETE）
 */
const http = {
	// GET请求
	get: (url, params = {}, options = {}) => {
		return request(url, {
			method: 'GET',
			data: params,
			...options
		});
	},

	// POST请求
	post: (url, data = {}, options = {}) => {
		return request(url, {
			method: 'POST',
			data,
			...options
		});
	},

	// 上传文件（封装uni.uploadFile）
	upload: (url, filePath, name = 'file', formData = {}, options = {}) => {
		return new Promise((resolve, reject) => {
			uni.uploadFile({
				url: API_BASE_URL + url,
				filePath,
				name,
				formData,
				// header: {
				// 	'Authorization': uni.getStorageSync('wxwork_token') || '',
				// 	...options.header
				// },
				success: (res) => {
					if (res.statusCode == 200) {
						// 拼接域名
						let quan_img = IMG_BASE_URL + res.data
						resolve(quan_img);
					} else {
						uni.showToast({
							title: data.msg || '上传失败',
							icon: 'none'
						});
						reject(res);
					}
					// const data = JSON.parse(res.data); // 解析JSON响应
					// if (res.statusCode === 200 && data.code === 0) {
					// 	resolve(data.data);
					// } else {
					// 	uni.showToast({
					// 		title: data.msg || '上传失败',
					// 		icon: 'none'
					// 	});
					// 	reject(data);
					// }
				},
				fail: (err) => {
					uni.showToast({
						title: '上传失败',
						icon: 'none'
					});
					reject(err);
				},
				complete: () => {
					if (options.showLoading !== false) {
						uni.hideLoading();
					}
				}
			});
		});
	},

	// 公共工具方法：获取完整图片URL（如果后端返回相对路径）
	getImageUrl: (relativePath) => {
		if (!relativePath) return '';
		// 若路径已包含http，则直接返回，否则拼接baseURL
		return relativePath.startsWith('http') ? relativePath : `${IMG_BASE_URL}${relativePath}`;
	}
};

// 导出公共方法和配置
module.exports = {
	http, // 请求方法集合
	API_BASE_URL, // 公共域名（方便特殊场景直接使用）
	// 可添加其他全局常量
	STATUS: {
		SUCCESS: 0, // 业务成功状态码（根据后端约定调整）
		LOGIN_EXPIRE: 401 // 登录过期状态码
	}
};